package com.example.controller;

//总结：每一个数据库的表对应唯一的一套，从xml——接口——service——controller形成了一个四件套，把它的增删改查对应起来

import com.example.common.Result;
import com.example.entity.Employee;
import com.example.service.EmployeeService;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController //只要你启动web端就要写这个
@RequestMapping("/employee")//和getmapping对应区分一下，不要写错了。这就是说我这个类里面我所有的前缀都有个叫employee
public class EmployeeController {
    //2.引入service
    @Resource
    private EmployeeService employeeService;

    //新增数据
    @PostMapping("/add")//postman上发送post请求localhost:9090/employee/add
    public Result add(@RequestBody Employee employee){ //@RequestBody把前端传过来的json字符串给它映射成java对象
        employeeService.add(employee);
        return Result.success();//新增数据不需要返回值
    }

    //更新数据
    @PutMapping("/update")
    public Result update(@RequestBody Employee employee){ //同样是@RequestBody把前端传过来的json字符串给它映射成java对象
        employeeService.update(employee);
        return Result.success();
    }

    //删除单个数据
    @DeleteMapping("/deleteById/{id}")//删除有路径参数
    public Result deleteById(@PathVariable Integer id){ //***@RequestBody传对象，@PathVariable传单个数据
        employeeService.deleteById(id);
        return Result.success();
    }

    //批量删除数据
    @DeleteMapping("/deleteBatch")
    public Result deleteBatch(@RequestBody List<Integer> ids){ //***@RequestBody传对象，@PathVariable传单个数据
        employeeService.deleteBatch(ids);
        return Result.success();
    }

    //查询所有employee数据
    @GetMapping("/selectAll")  //最后是employee加selectAll这两个拼接在一起 —— /employee/selectAll
    public Result selectAll(Employee employee){
        //1.拜托service帮我查嘛
        List<Employee> list= employeeService.selectAll(employee);
        //在？定义selectAll，然后需要返回一个List类型，发现没有employee类，再定义一个emploee类，创建一个entity包来定义这样的实体类
        //创建后List<Employee> list，注意return只能返回Result类型。
        //没创建selectAll？它帮你创建你去service里写就行了
        return Result.success(list);
    }

    //基于注解查询单个employee数据 web端输入格式：localhost:9090/employee/selectById/1/101 这里有失误，如果多个传参基于注解的sql语句需要改
    @GetMapping("/selectById/{id}")
    public Result selectById(@PathVariable Integer id){ //新注解@PathVariable
        Employee employee= employeeService.selectById(id);
        return Result.success(employee);
    }

    //分页查询
    @GetMapping("/selectPage")//这个Employee employee是做前端查询功能回来重新设置的，目的：让entity包Employee类里所有属性作为它的参数
    public Result selectPage(Employee employee,
                            @RequestParam(defaultValue = "1") Integer pageNum,
                            @RequestParam(defaultValue="10") Integer pageSize){//两个参数，每页多少个pageSize和当前页数pageNum，记得设置默认值
        PageInfo<Employee> pageInfo= employeeService.selectPage(employee,pageNum,pageSize);
        return Result.success(pageInfo);
    }

    //下面不需要了，只保留全部查询和单个查询
//    //通过url传参查询单个employee数据  web端输入格式：localhost:9090/employee/selectOne?id=1&no=101  其中no=101可有可无
//    @GetMapping("/selectOne")
//    public Result selectOne(@RequestParam Integer id, @RequestParam(required = false) String no){ //新注解@RequestParam，与上面那个基本相同，只是传参方式不同,required = false表示可有可无
//        Employee employee= employeeService.selectById(id);
//        return Result.success(employee);
//    }
//
//    //主要看一下多个传参很灵活，感觉不正式  web端输入格式：localhost:9090/employee/selectList?id=1&no=101&...  其中查找条件个数随意
//    @GetMapping("/selectList")
//    public Result selectList(Employee employee){ //没有注解，但需要tostring
//        List<Employee> list= employeeService.selectList(employee);
//        return Result.success(list);
//    }
}
